\section{Main features of the \sicl{} system}
\label{sec-sicl-features}

In this section, we give a quick overview of the main features of our
system \sicl{}.  The important aspect of our system in order for the
technique described in this paper to work is that code is not moved by
the garbage collector, as described below.

\sicl{} is a system that is written entirely in \commonlisp{}.  Thanks
to the particular bootstrapping technique
\cite{durand_irene_2019_2634314} that we developed for \sicl{}, most
parts of the system can use the entire language for their
implementation.  We thus avoid having to keep track of what particular
subset of the language is allowed for the implementation of each
module.

We have multiple objectives for the \sicl{} system, including
exemplary maintainability and good performance.  However, the most
important objective in the context of this paper is that the design of
the garbage collector is such that executable instructions do not move
as a result of a collection cycle.  Our design is based on that of a
concurrent generational collector for the ML language
\cite{Doligez:1993:CGG}.  We use a \emph{nursery} generation for each
thread, and a global heap for shared objects.  So, for the purpose of
the current work, the important feature of the garbage collector is
that the objects in the global heap do not move, and that all
executable code is allocated in that global heap.

The fact that code does not move is beneficial for the instruction
cache; moreover it crucially allows us to allocate different objects
in the global heap containing machine instructions, and to use fixed
relative addresses to refer to one such object from another such
object.
